import {deepCopy, isArray} from '@/utils/index'

/**
 * 将List转换成具有层级关系的tree list
 * @param data
 * @returns {Array}
 */
export function toTree (data) {
  // 深度拷贝 防止改变data的值
  data = deepCopy(data)
  if (isArray(data)) {
    if (data.length === 0) {
      return []
    }
  } else {
    console.error('TypeError: Cannot convert ' + typeof data + 'to Array.')
    return []
  }
  let map = new Map()
  let result = []
  // 删除所有children,以防止多次调用
  data.forEach(function (item) {
    delete item.children
  })
  // 将数据存储为以id为key的map索引数据列中
  data.forEach((item) => {
    map[item.id] = item
  })
  data.forEach((item) => {
    // 以当前遍历项的parentId,去map对象中查找
    let parent = map[item.parentId]
    // 如果查找到数据，说明此项不在顶级当中,需要添加到对应的父级中
    if (parent) {
      (parent.children || (parent.children = [])).push(item)
    } else {
      // 如果未查找到数据,把当前的item添加到结果集中，作为顶级
      result.push(item)
    }
  })
  return result
}
/**
 * 改变有层级关系的tree节点的可选状态
 * @param data
 * @param disabled
 */
export function changeDisabled (data, disabled) {
  for (let i = 0; i < data.length; i++) {
    let children = data[i].children
    if (children !== undefined) {
      for (let j = 0; j < children.length; j++) {
        children[j].disabled = disabled
      }
    }
    data[i].disabled = disabled
  }
}
